繼續來談到屬於屬性包裝器的
狀態變更的 @State
與
溝通綁定的 @Binding
用昨天我們Sheet的範例
改成
struct ContentView: View {
@State var showingisPlay = false
var body: some View {
Button(action: {
self.showingisPlay.toggle()
}) {
Image(systemName: showingisPlay ? "pause.circle" : "play.circle")
}
}
}
上面範例會因為 showingisPlay 的狀態變更不同的圖示
那這裡提到 Binding
從apple 提到
Use a binding to create a two-way connection between a property that stores data, and a view that displays and changes the data.
意思是他會作為 視圖 與 元件(資料) 作為溝通的管道
那就廢話不多說
我們先將剛剛的 Button 作為一個元件(子視圖)
struct ButtonView: View {
@Binding var showingisPlay: Bool
var body: some View {
Button(action: {
self.showingisPlay.toggle()
}) {
Image(systemName: showingisPlay ? "pause.circle" : "play.circle")
}
}
}
接著是 父視圖
struct ContentView: View {
@State private var showingisPlay: Bool = false
var body: some View {
ButtonView(showingisPlay: $showingisPlay)
}
}
這樣就完成了兩者之間的連結
連結性會影響你的程式長相(結構)
#使用 @Binding 會因為綁定這件資料,變數上會多加上 $ 符號